package ListBook;

import java.io.RandomAccessFile;
import java.nio.channels.FileChannel;

import javafx.collections.FXCollections;
import javafx.collections.ListChangeListener;
import javafx.collections.ObservableList;

/**
 * ****************************************
 * FILENAME: Utilities.java
 * ****************************************
 * Hilfsmethoden welche die ganze App betreffen.
 *
 * @author Kove / HOEFI
 * @since 31.01.2015
 * @version 1.0
 */
public class Utilities {

  /**
   * Schreibt und blockiert eine Lockdatei ins Programmverzeichnis um das mehrfache starten zu verhindern.
   * 
   * @author Kove / HOEFI
   * @since 31.01.2015
   * @return true wenn die Lockdatei erfolgreich geschrieben wurde.
   */
  public static boolean tryLockApplication() {
    try {
      @SuppressWarnings("resource")
      RandomAccessFile randomAccessFile = new RandomAccessFile(ApplicationSettings.LOCK_FILE, "rw");
      FileChannel fileChannel = randomAccessFile.getChannel();
      if (fileChannel.tryLock() != null)
        return true;
    } catch (Exception e) {
    }
    return false;
  }

  /**
   * Generiert eine neue ObservableList mit einem ChangeListener.
   * 
   * @author Kove / HOEFI
   * @param <T>
   * @since 24.02.2015
   * @return Leere und ueberwachte ObservableList.
   */
  public static <T> ObservableList<T> createNewObservableList(ListChangeListener<Object> listener) {
    ObservableList<T> observableList = FXCollections.observableArrayList();
    if (listener != null)
      observableList.addListener(listener);
    return observableList;
  }
}
